package com.jt.service;

import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.*;

@Service
public class ItemCatServiceImpl implements ItemCatService {
    @Resource
    private ItemCatMapper itemCatMapper;


    /*
    * 业务：Map<parentId,List<ItemCat>>
    * 思路：
    * 判断Map中是否有key
    * true:获取list集合，将自己追加到集合中
    * false:创建list集合，将自己作为第一个元素放入Map中
    *
    *
    * */
    public Map<Integer,List<ItemCat>> getMap() {
        //创建Map集合
        Map<Integer,List<ItemCat>> map =new HashMap<>();
        //获取所有的数据
        List<ItemCat> list = itemCatMapper.findItemCatList();
        //遍历list集合
        for (ItemCat itemCat : list) {
            //获取parentId
            int key = itemCat.getParentId();
            //判断map中是否有key
            if(map.containsKey(key)){
                //获取list集合,将自己追加到集合中
                map.get(key).add(itemCat);
            }else {
            //创建list集合，将自己作为第一个元素放入Map中
                List<ItemCat> tempList = new ArrayList<>();
                tempList.add(itemCat);
                map.put(key,tempList);
            }
        }
        return map;
    }

    @Override
    public List<ItemCat> findItemCatList(Integer level) {
        //获取所有的数据
        Map<Integer,List<ItemCat>> map = getMap();
        //level=1:获取一级分类
        if(level==1)
            //获取一级分类
        return map.get(0);
        //level=2:获取二级分类
        if (level==2)
        return getTwoList(map);
        //level=3:获取三级分类
        List<ItemCat> threeList = getThreeList(map);
        return threeList;



    }

    @Override
    public void saveItemCat(ItemCat itemCat) {
        Date date = new Date();
        itemCat.setStatus(true)
                .setCreated(date)
                .setUpdated(date);
        itemCatMapper.insert(itemCat);
    }

    @Override
    public void updateItemStatus(ItemCat itemCat) {
        Date date = new Date();
        itemCat.setUpdated(date);
        itemCatMapper.updateItemStatus(itemCat);
    }

    @Override
    public void updateItemCat(ItemCat itemCat) {
        Date date = new Date();
        itemCat.setUpdated(date);
        itemCatMapper.updateItemCat(itemCat);
    }

    @Override
    @Transactional
    public void deleteItemCat(ItemCat itemCat) {
        //判断level是否为3
        if(itemCat.getLevel()==3){
            //删除三级分类
            itemCatMapper.deleteItemCat3(itemCat);
        }
        //判断level是否为2
        if(itemCat.getLevel()==2){
            //删除二级分类和三级分类
            itemCatMapper.deleteItemCat2(itemCat.getId());
        }
        //判断level是否为1
        if(itemCat.getLevel()==1){
            //删除一级分类
            itemCatMapper.deleteItemCat1(itemCat.getId());
        }

    }


    private List<ItemCat> getThreeList(Map<Integer,List<ItemCat>> map) {
        //1.查询一级数据和二级数据
        List<ItemCat> oneList = getTwoList(map);
        //2.遍历一级数据
        for (ItemCat oneItemCat : oneList) {
            //3.获取二级数据 二级数据可能为空
            List<ItemCat> twoList = oneItemCat.getChildren();
            if (twoList==null||twoList.size()==0)
                continue;

            //4.遍历二级数据
            for (ItemCat twoItemCat : twoList) {
                //5.获取三级数据
                List<ItemCat> threeList = map.get(twoItemCat.getId());
                //6.将三级数据设置到二级数据中
                twoItemCat.setChildren(threeList);
            }
        }
        return oneList;
    }
    private List<ItemCat> getTwoList(Map<Integer,List<ItemCat>> map) {
        //1.查询一级数据
        List<ItemCat> oneList = map.get(0);
        //2.遍历一级数据
        for (ItemCat oneItemCat : oneList) {
            int id= oneItemCat.getId();
            //3.获取二级数据
            List<ItemCat> twoList = map.get(id);
            //4.将二级数据设置到一级数据中
            oneItemCat.setChildren(twoList);
        }
        return oneList;
    }
}

//    @Override
//    public List<ItemCat> findItemCatList(Integer level) {
//        //查询出所有的一级分类    level=1
//        int parentId = 0;
//        List<ItemCat> onelist=itemCatMapper.findItemCatList(parentId);
//        //查询出所有的二级分类
//        for (ItemCat itemCat : onelist) {  //遍历一级分类
//            Integer oneid = itemCat.getId();
//            List<ItemCat> twolist=itemCatMapper.findItemCatList(oneid);
//            itemCat.setChildren(twolist);
//        }
//        //查询出所有的三级分类
//        for (ItemCat itemCat : onelist) {  //遍历一级分类
//            List<ItemCat> twolist=itemCat.getChildren();
//            for (ItemCat towItemCat : twolist) {  //遍历二级分类
//                Integer twoid = towItemCat.getId();
//                List<ItemCat> threelist=itemCatMapper.findItemCatList(twoid);
//                towItemCat.setChildren(threelist);
//            }
//        }
//
//        return onelist;




